home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / dev / gui / mui23dev.lha / MUI / Developer / ExtClasses / MCC_UserData / UserData.c < prev    next >
C/C++ Source or Header  |  1994-12-23  |  6KB  |  252 lines

  1. /*
  2.     UserData.mcc is a subclass of groupclass. Several gadgets
  3.     allow entering a users name and address. This silly class
  4.     is just a demo how to write subclasses of group class.
  5.  
  6.    Note: Compile with SAS/C 6.1 and above.
  7. */
  8.  
  9.  
  10. /* Compiler specific stuff */
  11. #if defined(_DCC)
  12. #define REG(x) __ ## x
  13. #define SAVEDS __geta4
  14. #define ASM
  15. #define REGARGS __regargs
  16. #else
  17. #if defined(__SASC)
  18. #define REG(x) register __ ## x
  19. #define SAVEDS __saveds
  20. #define ASM __asm
  21. #define REGARGS __regargs
  22. #else
  23. #error "Don't know how to handle register arguments for your compiler."
  24. #endif
  25. #endif
  26.  
  27.  
  28.  
  29. /* Includes */
  30. #include <libraries/mui.h>
  31. #include <dos/dos.h>
  32. #include <clib/alib_protos.h>
  33. #include <clib/exec_protos.h>
  34. #include <clib/dos_protos.h>
  35. #include <clib/intuition_protos.h>
  36. #include <clib/utility_protos.h>
  37. #include <clib/muimaster_protos.h>
  38. #include <stdlib.h>
  39. #include <string.h>
  40.  
  41. #include <pragmas/exec_pragmas.h>
  42. #include <pragmas/dos_pragmas.h>
  43. #include <pragmas/intuition_pragmas.h>
  44. #include <pragmas/utility_pragmas.h>
  45. #include <pragmas/muimaster_pragmas.h>
  46.  
  47. #include "UserData_mcc.h"
  48.  
  49. static const char VersionTag[] = "\0$VER: UserData.mcc 10.11 (23.12.94)";
  50.  
  51.  
  52. #define CLASS       MUIC_UserData
  53. #define SUPERCLASS MUIC_Group
  54.  
  55. struct Data
  56. {
  57.     Object *group;
  58.     Object *first;
  59.     Object *name;
  60.     Object *street;
  61.     Object *city;
  62.     Object *country;
  63.     Object *phone;
  64.     Object *email;
  65. };
  66.  
  67.  
  68. struct Library *MUIClassBase;
  69. struct Library *MUIMasterBase;
  70. struct Library *SysBase;
  71. struct Library *UtilityBase;
  72. struct Library *DOSBase;
  73. struct Library *IntuitionBase;
  74.  
  75. static struct MUI_CustomClass *ThisClass;
  76.  
  77.  
  78. static const char *PopNames[] =
  79. {
  80.     "Germany",
  81.     "Suisse",
  82.     "Italy",
  83.     "U.S.A.",
  84.     "Australia",
  85.     NULL
  86. };
  87.  
  88.  
  89. static ULONG mNew(struct IClass *cl,Object *obj,struct opSet *msg)
  90. {
  91.     struct Data *data;
  92.  
  93.     if (!(obj = (Object *)DoSuperMethodA(cl,obj,(Msg)msg)))
  94.         return(0);
  95.  
  96.     data = INST_DATA(cl,obj);
  97.  
  98.     data->group = VGroup,
  99.         Child, HGroup, GroupFrameT("Customer"),
  100.             Child, ColGroup(2), MUIA_Weight, 200,
  101.                 Child, Label("Name:"   ), Child, HGroup,
  102.                     Child, data->name  = MUI_MakeObject(MUIO_String,NULL,50),
  103.                     Child, data->first = MUI_MakeObject(MUIO_String,NULL,50),
  104.                     End,
  105.                 Child, Label("Street:"  ), Child, data->street = MUI_MakeObject(MUIO_String,NULL,100),
  106.                 Child, Label("PC, City:"), Child, data->city   = MUI_MakeObject(MUIO_String,NULL,100),
  107.                 End,
  108.             Child, ColGroup(2),
  109.                 Child, Label("Country:"),
  110.                 Child, data->country = PoplistObject,
  111.                     MUIA_Poplist_Array   , PopNames,
  112.                     MUIA_Popstring_String, MUI_MakeObject(MUIO_String,NULL,30),
  113.                     MUIA_Popstring_Button, MUI_MakeObject(MUIO_PopButton,MUII_PopUp),
  114.                     End,
  115.                 Child, Label("Phone:"  ), Child, data->phone = MUI_MakeObject(MUIO_String,NULL,30),
  116.                 Child, Label("EMail:"  ), Child, data->email = MUI_MakeObject(MUIO_String,NULL,30),
  117.                 End,
  118.             End,
  119.         End;
  120.  
  121.     if (!data->group)
  122.     {
  123.         CoerceMethod(cl,obj,OM_DISPOSE);
  124.         return(0);
  125.     }
  126.  
  127.     DoMethod(obj,OM_ADDMEMBER,data->group);
  128.  
  129.     msg->MethodID = OM_SET;     /* a little trick to parse taglist */
  130.     DoMethodA(obj, (Msg) msg);         /* and set attributes with OM_SET. */
  131.     msg->MethodID = OM_NEW;     /* restore method id           */
  132.  
  133.     return((ULONG)obj);
  134. }
  135.  
  136.  
  137. static ULONG mDispose(struct IClass *cl,Object *obj,Msg msg)
  138. {
  139.     return(DoSuperMethodA(cl,obj,msg));
  140. }
  141.  
  142.  
  143. static ULONG mSet(struct IClass *cl,Object *obj,struct opSet *msg)
  144. {
  145.     struct Data *data = INST_DATA(cl,obj);
  146.     struct TagItem *tags,*tag;
  147.  
  148.     for (tags=msg->ops_AttrList;tag=NextTagItem(&tags);)
  149.     {
  150.         switch (tag->ti_Tag)
  151.         {
  152.             case MUIA_UserData_Name   : set(data->name   ,MUIA_String_Contents,tag->ti_Data); break;
  153.             case MUIA_UserData_First  : set(data->first  ,MUIA_String_Contents,tag->ti_Data); break;
  154.             case MUIA_UserData_Street : set(data->street ,MUIA_String_Contents,tag->ti_Data); break;
  155.             case MUIA_UserData_City   : set(data->city   ,MUIA_String_Contents,tag->ti_Data); break;
  156.             case MUIA_UserData_Country: set(data->country,MUIA_String_Contents,tag->ti_Data); break;
  157.             case MUIA_UserData_EMail  : set(data->email  ,MUIA_String_Contents,tag->ti_Data); break;
  158.             case MUIA_UserData_Phone  : set(data->phone  ,MUIA_String_Contents,tag->ti_Data); break;
  159.         }
  160.     }
  161.  
  162.     return(DoSuperMethodA(cl,obj,(Msg)msg));
  163. }
  164.  
  165.  
  166. static ULONG mGet(struct IClass *cl,Object *obj,Msg msg)
  167. {
  168.     struct Data *data = INST_DATA(cl,obj);
  169.  
  170.     switch (((struct opGet *)msg)->opg_AttrID)
  171.     {
  172.         case MUIA_UserData_Name   : return(DoMethodA(data->name   ,msg));
  173.         case MUIA_UserData_First  : return(DoMethodA(data->first  ,msg));
  174.         case MUIA_UserData_Street : return(DoMethodA(data->street ,msg));
  175.         case MUIA_UserData_City   : return(DoMethodA(data->city   ,msg));
  176.         case MUIA_UserData_Country: return(DoMethodA(data->country,msg));
  177.         case MUIA_UserData_EMail  : return(DoMethodA(data->email  ,msg));
  178.         case MUIA_UserData_Phone  : return(DoMethodA(data->phone  ,msg));
  179.     }
  180.  
  181.     return(DoSuperMethodA(cl,obj,msg));
  182. }
  183.  
  184.  
  185. static ULONG mEdit(struct IClass *cl,Object *obj,Msg msg)
  186. {
  187.     /* do something here */
  188.     return(0);
  189. }
  190.  
  191.  
  192. static ULONG mPrint(struct IClass *cl,Object *obj,Msg msg)
  193. {
  194.     /* do some other thing here */
  195.     return(0);
  196. }
  197.  
  198.  
  199. static SAVEDS ASM ULONG Dispatcher(REG(a0) struct IClass *cl,
  200.                    REG(a2) Object *obj,
  201.                    REG(a1) Msg msg)
  202. {
  203.     switch (msg->MethodID)
  204.     {
  205.         case OM_NEW             : return(mNew        (cl,obj,(APTR)msg));
  206.         case OM_DISPOSE          : return(mDispose    (cl,obj,(APTR)msg));
  207.         case OM_GET             : return(mGet        (cl,obj,(APTR)msg));
  208.         case OM_SET             : return(mSet        (cl,obj,(APTR)msg));
  209.  
  210.         case MUIM_UserData_Edit      : return(mEdit       (cl,obj,(APTR)msg));
  211.         case MUIM_UserData_Print     : return(mPrint      (cl,obj,(APTR)msg));
  212.     }
  213.  
  214.     return(DoSuperMethodA(cl,obj,msg));
  215. }
  216.  
  217.  
  218. long ASM __UserLibInit(REG(a6) struct Library *mybase)
  219. {
  220.     SysBase = *((struct Library **)4);
  221.     MUIClassBase = mybase;
  222.  
  223.     if (MUIMasterBase = OpenLibrary("muimaster.library",8))
  224.     {
  225.         if (ThisClass = MUI_CreateCustomClass(mybase,SUPERCLASS,NULL,sizeof(struct Data),Dispatcher))
  226.         {
  227.             UtilityBase   = ThisClass->mcc_UtilityBase;
  228.             DOSBase       = ThisClass->mcc_DOSBase;
  229.             IntuitionBase = ThisClass->mcc_IntuitionBase;
  230.             return(0);
  231.         }
  232.         CloseLibrary(MUIMasterBase);
  233.     }
  234.     return(-1);
  235. }
  236.  
  237.  
  238. void ASM __UserLibCleanup(REG(a6) struct Library *mybase)
  239. {
  240.     if (MUIMasterBase)
  241.     {
  242.         if (ThisClass) MUI_DeleteCustomClass(ThisClass);
  243.         CloseLibrary(MUIMasterBase);
  244.     }
  245. }
  246.  
  247.  
  248. SAVEDS ASM struct MUI_CustomClass *MCC_GetClass(VOID)
  249. {
  250.     return(ThisClass);
  251. }
  252.